﻿#include "MainWindow.h"
#include <QSoundEffect>
#include <QPushButton>
#include <QMediaMetaData>


Mainwindow::Mainwindow(QWidget* parent)
	:QWidget(parent)
{
	//soundEffect();


	mediaPlayer();
}

void Mainwindow::soundEffect()
{
	//设置资源：
#if 0
	m_boomSound.setSource(QUrl("file:assets/sound/downloadFinish.wav"));
#else
	m_boomSound.setSource(QUrl::fromLocalFile("assets/sound/downloadFinish.wav"));
#endif
	qInfo() << QUrl::fromLocalFile("assets/sound/downloadFinish.wav");


	//设置播放循环的次数：
	//m_boomSound.setLoopCount(2);		//循环两次
	m_boomSound.setLoopCount(QSoundEffect::Infinite);	//设置一直播放

	//播放：
	m_boomSound.play();

}

void Mainwindow::mediaPlayer()
{
	//创建播放器：
	auto player = new QMediaPlayer(this);

	//创建音频输出：
	auto audioOutput = new QAudioOutput(this);

	//把输出交给播放器：
	player->setAudioOutput(audioOutput);

	//设置资源：
	player->setSource(QUrl::fromLocalFile("assets/music/That-Girl.mp3"));
			/*
			竟然输出这些个玩应：可能是更新了，可以自动输出音乐文件信息了；
			Available HW decoding frameworks:
			     dxva2
			     d3d11va
			Input #0, mp3, from 'D:/vs-code/Qt_project/音视频播放/out/build/x64-Debug/bin/assets/music/That-Girl.mp3':
			  Metadata:
			    title           : That Girl
			    album           : Back Around
			    artist          : Olly Murs
			  Duration: 00:02:56.80, start: 0.025057, bitrate: 320 kb/s
			  Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 320 kb/s
			    Metadata:
			      encoder         : LAME3.99r
			    Side data:
			      replaygain: track gain - -9.500000, track peak - unknown, album gain - unknown, album peak - unknown,
			[mp3float @ 0000024BC098F100] Could not update timestamps for skipped samples.
			*/


	//播放：
	player->play();


	//设置音量：
	audioOutput->setVolume(0.12);
	//设置静音：
	//audioOutput->setMuted(true);


	//获取输出音乐时长：
		//现在 我的这个版本   可以直接通过这个函数来获取的了！！！！！！！！：
	qInfo() << player->duration();		//176796
		//也可以通过player的信号，只有当信号被触发的时候，duration有正确值：
	connect(player, &QMediaPlayer::durationChanged, [=](quint64 duration)
		{
			qInfo() << duration<<" "<<player->duration();
			//这个方法貌似还不行了呢...
		});

	


	auto btn = new QPushButton("点老子,快进到中间",this);
	btn->move(300, 300);
	connect(btn, &QPushButton::clicked, [=]()
		{
			//设置音乐从音乐时长的哪个时间开始：
			player->setPosition(player->duration() / 2);	//从音乐的时长的一半开始
		});

	//这个类已经能够自动输出媒体信息了，然后好像再操作 也不能在输出了...
	connect(player,&QMediaPlayer::metaDataChanged,this,&Mainwindow::onMetaDataChanged);




}

void Mainwindow::onMetaDataChanged()
{
	//获取媒体的数据：
	auto player = dynamic_cast<QMediaPlayer*> (sender());
	if (player)
	{
		auto mData = player->metaData();
		auto keyList = mData.keys();
		for (auto key : keyList)
		{
			qInfo() << key << mData.stringValue(key);


		}

	}
}